#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Size 20
// char * GetName()
// {
//     static char Name[Size] = {0};//加上static由getname函数栈转到静态全局区
//     scanf("%s",Name);
//     return Name;
// }
char * GetName()
{
    char* Name = (char*)malloc(sizeof(char) *Size);
    if(Name == NULL)
    {
        printf("malloce error!\n");
        return NULL;
    }
    scanf("%s",Name);
    return Name;

}

int main()
{
    char * s = GetName();
    printf("%s\n",s);
    free(s);
    
    //malloc申请变量
    // int *a = (int*)malloc(sizeof(int));
    // if(a == NULL)//必须写这个代码
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }
    // *a = 10;
    // printf("%d\n",*a);
    // free(a);//释放当初申请的指针

    // malloc申请数组
    // int *a = (int*)malloc(sizeof(int)*10);
    // if(a == NULL)
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }
    // for(int i = 0; i < 10; i++)
    // {
    //     *(a + i) = i + 1;

    // }
    // for(int i = 0; i < 10; i++)
    // {
    //     printf("%d",a[i]);
    // }
    // printf("\n");

    // //malloc申请字符串
    // char *s = (char*)malloc(sizeof(char)* 10);
    // if(s == NULL)
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }

    // //memset设置内存中的值
    // // memset(s,0,10);
    // int a = 109;
    // memcpy(s,&a,4);//按照字节拷贝内存
    // printf("%d\n",*(int*)s);
    // free(s);

    // strcpy(s,"hello");
    // printf("%s\n",s);
    // free(s);

    // //malloc申请二维数组
    // //先申请指针数组
    // int* *a = (int**)malloc(sizeof(int*) * 2);//先指向两行
    // if(a == NULL)
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }
    // for(int i = 0; i < 2; i++)
    // {
    //     a[i] = (int*)malloc(sizeof(int) * 3);//再指向三列
    //     if(a[i] == NULL)
    //     {
    //         printf("malloc error!\n");
    //         return -1;
    //     }
    // }
    // for(int i = 0; i < 2;i++)
    // {
    //     for(int j = 0; j < 3; j ++)
    //     {
    //         a[i][j] = i * 3 + j;
    //         printf("%d ",a[i][j]);
    //     }
    //     printf("\n");
    // }
    // for(int i = 0; i < 2; i++)
    // {
    //     free(a[i]);//先放掉数组元素
    // }
    // free(a);//再放掉张指针数组


    return 0;
}